package com.zk.algorithm;

import com.zk.algorithm.annotation.LeetCode;

import java.util.Stack;

/**
 * 3,1,4,8,6
 *
 * |3|
 * |1|
 * |4|  |1| <- 越来越小
 * |8|  |4|
 * |6|  |6|
 * ---  ---
 * main min
 *
 * @author zk
 */
@LeetCode("155")
public class MinStack {

    // stack: store the stack numbers
    private Stack<Integer> stack = new Stack<Integer>();
    // minStack: store the current min values
    private Stack<Integer> minStack = new Stack<Integer>();

    public void push(int x) {
        // store current min value into minStack
        if (minStack.isEmpty() ||
                x <= minStack.peek() /** 有更小的值了 **/)
            minStack.push(x);
        stack.push(x);
    }

    public void pop() {
        // use equals to compare the value of two object, if equal, pop both of them
        if (stack.peek().equals(minStack.peek()))
            minStack.pop();

        stack.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }

}
